# import sys
# def main():
# s = raw_input()
# l = []
# n = []
# for i in range(len(s)):
# l.append(int(s[i]))
# for i in range(1,10):
# n.append(l.count(i))
# zero = l.count(0)
# low = min(n)
# pos = n.index(low)
# if(zero < low):
# sys.stdout.write('1'+'0'*(zero+1))
# else:
# sys.stdout.write(str(pos+1)*(n[pos]+1))
# main()
S = input()
S = S.strip()
s = list(S)
length= len(s)
for i in range(length):
s[i] = int(s[i])
t = {}
for i in range(10):
t[i] = 0
for i in s:
t[i]+=1
print(t)
m_min = t[0]
value = 0
for i in range(10):
if(t[i]==m_min):
if(value == 0):
value = i
if(t[i] < m_min):
m_min = t[i]
value = i
#print(value)
count = 0
if(value==0):
count = 10**(m_min+1)
else:
for j in range(m_min+1):
count += value*(10**j)
print(count)
#include <iostream>
#include <string>
using namespace std;
int Min(string &str, int bound);
int main()
{
string numbers;
getline(cin,numbers);
cout<<Min(numbers,10);
return 0;
}
int Min(string &str,int bound){
int beg;
int base;
if(bound==10) {
beg=1;
base=0;
}
else{
beg=0;
base=bound/10;
}
size_t pos=string::npos;
for(int i=beg;i<10;i++){
if((pos=str.find(i+'0'))==string::npos){
if(i!=0){
return i*base+i;
}else{
return 1*base+i;
}
}
else{
str.erase(pos,1);
}
}
return Min(str,bound*10);
}
动归,比如说1-9都出现过了10-100(不包含100,看10,11,22,33,..,99,然后将重复的再从字符串中剔除), 10-100中重复字符串仍然有,那么看100-1000中重复的依次。。。不知道对不对
StrDistance { (String[] args) { Scanner in = Scanner(System.)String s = in.next().trim()String t = in.next().trim()result = sl = tl = slen = s.length()tlen = t.length()(i = i < sleni++) { sl += s.charAt(i) - sl = sl << } sl = sl >> (i = i < tleni++) { tl += t.charAt(i) - tl = tl << } tl = tl >> pow = () Math.(tlen)dist = slen - tlen + count1 = (dist-- > ) { result = (sl % pow) ^ tlsl = sl >> (result > ) { count1 += result & result = result >> } } System..print(count1)in.close()} (String sString t) { result = count = slen = s.length()tlen = t.length()dist = slen - tlen(offset = offset <= distoffset++) {count = (i = i < tleni++) { sc = s.charAt(i + offset)tc = t.charAt(i)count += sc == tc ? : } result += count} } }
import java.util.Scanner; public class StrDistance { public static void main(String[] args) { //超时 Scanner in = new Scanner(System.in); String s = in.next().trim(); String t = in.next().trim(); long result = 0; long sl = 0, tl = 0; //char array to bin number int slen = s.length(), tlen = t.length(); for (int i = 0; i < slen; i++) { sl += s.charAt(i) - 'a'; sl = sl << 1; } sl = sl >> 1; for (int i = 0; i < tlen; i++) { tl += t.charAt(i) - 'a'; tl = tl << 1; } tl = tl >> 1; //异或 long pow = (long) Math.pow(2, tlen); int dist = slen - tlen + 1; //数1 int count1 = 0; while (dist-- > 0) { result = (sl % pow) ^ tl; sl = sl >> 1;//pow = pow << 1; while (result > 0) { count1 += result & 1; result = result >> 1; } } System.out.print(count1); in.close(); } private void temp(String s, String t) { long result = 0; int count = 0; int slen = s.length(), tlen = t.length(), dist = slen - tlen; for (int offset = 0; offset <= dist; offset++) {// Brute Force count = 0; for (int i = 0; i < tlen; i++) { char sc = s.charAt(i + offset), tc = t.charAt(i); count += sc == tc ? 0 : 1; } result += count; } } }
先用的暴力,70%超时了。
后来用位运算,反而只有30%通过...
不知道哪里有点问题
#include<iostream>
#include<string>
using namespace std;
int main()
{
string strS, strT;
int sum = 0;
cin >> strS;
cin >> strT;
if (strS.length() >= strT.length())
{
for (int i = 0; i <= (strS.length() - strT.length()); i++)
{
for (int j = 0; j < strT.length(); j++)
{
if (strS[i + j] != strT[j])
{
sum++;
}
}
}
}
cout << sum << endl;
return 0;
}
7个点就原地不动了
用Python写的,感觉思路没错,在本地IDE测试了几遍都没问题,但是调试通过率却只有20%
s1 = raw_input()
s2 = raw_input()
s1=s1.strip('\n')
s1=s1.strip('\r')
s2=s2.strip('\n')
len1 = len(s1)
len2 = len(s2)
distance = 0
print(s1,' len is :',len1)
print(s2,' len is :',len2)
d = len1 - len2 + 1
s3 = []
for i in range(d):
s3.append(s1[i:i+len2])
for i in s3:
for j in range(len2):
if i[j]!=s2[j]:
count+=1
print(distance)
package pro.kwen.questions;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
private static int getCharToInt(char ch) {
return ch - '0';
}
public static void main(String[] args) {
String input = "";
int a[] = new int[10];
Map<Integer , Integer> map = new HashMap<>();
Scanner sc = new Scanner(System.in);
input = sc.nextLine();
for(int i = 0; i < input.length(); i++) {
a[getCharToInt(input.charAt(i))]++;
}
for(int i = 0; i < a.length; i++) {
map.put(i, a[i]);
}
System.out.println(map);
//如果10种字符都出现了一次 找出现次数最低的和key最小的正数
int min = 0;
for(int i = 0; i < map.size(); i++) {
if(map.get(min) > map.get(i)) {
min = i;
}
}
String result = "";
if(map.get(min) == 0 && (min != 0)) {
result += min;
}else {
if(map.get(0) != 0) {
for(int j = 0; j < map.get(min) + 1; j++) {
result = result + map.get(min);
}
result = result + "0";
}else {
for(int j = 0; j < map.get(min) ; j++) {
result = result + min;
}
result = result + "0";
}
}
System.out.println(result);
sc.close();
}
}
数字字符题想到了找到出现字符次数最低的那个字符 还是后面逻辑没考虑清楚死掉了
#include<stdio.h>
#include<string.h>
#define MAXSIZE 100000
int main(void) {
char S[MAXSIZE];
char T[MAXSIZE];
int i;
int count = 0;
int j;
int times;
scanf("%s%s", &S, &T);
times = strlen(S) - strlen(T) + 1;
for(i = 0; i < times; i++) {
for(j = 0; T[j]; j++) {
if(S[j + i] != T[j]) {
count++;
}
}
}
printf("%d\n", count);
return 0;
}
字符串问题 7个点原地不动了 我的头嗡嗡的
老哥,一样的AC码(~ ̄▽ ̄)~
#include <bits/stdc++.h> using namespace std; #define FOR(x,y) for (int x = 0; x < y; ++x) #define For(x,y,z) for (int x = y; x <= z; ++x) #define ms(x,y) memset (x, y, sizeof(x)) const int N = 1010; int min (int * a) { int x = a[0] + 1, y = 0; For(i,1,9) if (a[i] < x) x = a[i], y = i; return y; } void solve (char * s) { int a[10]; ms(a,0); int l = strlen(s); FOR(i,l) ++a[s[i]-'0']; int k = min(a); if (!k) { printf ("1"); FOR(i,a[k]+1) printf ("0"); } else FOR(i,a[k]+1) printf ("%d", k); printf ("\n"); } int main () { char s[N]; while (~scanf ("%s", s)) solve (s); return 0; }