题一:判断字符串中有无重复字符
实现一个算法,确定一个字符串的所有字符是否全都不同。
import java.util.Scanner;
public class LianXi {
public static boolean checkdifferent(String s){
int[] flag = new int[1000];
for(int i = 0; i<s.length(); i++){
int c = (int)(s.charAt(i));
if(flag[c]>0)
return false;
else
flag[c]++;
}
return true;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s = in.next();
boolean res = checkdifferent(s);
if(res == false)
System.out.println("有重复");
else
System.out.println("无重复");
}
}
题二:翻转字符串
给定一个算法,翻转一个给定的字符串
import java.util.Scanner;
public class LianXi {
public static String ReverseString(String s){
int N = s.length();
char[] t = new char[N];
for(int i = 0; i<N; i++){
t[i] = s.charAt(N-1-i);
}
return new String(t);
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s = in.next();
String res = ReverseString(s);
System.out.println(res);
}
}
题三:变形词问题
变形词:两个串有相同的字符及数量组成
给定两个字符串,请编写程序,确定一个字符串的字符重新排序后,能否变成另一个字符串
这里规定大小写为不同字符,且考虑字符串中的空格。
import java.util.Arrays;
import java.util.Scanner;
public class LianXi {
public static boolean checksam(String A, String B){
int lenA = A.length();
int lenB = B.length();
if(lenA != lenB){
return false;
}
char[] arrA = A.toCharArray();
char[] arrB = B.toCharArray();
Arrays.sort(arrA);
Arrays.sort(arrB);
return Arrays.equals(arrA,arrB);
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String A = in.next();
String B = in.next();
boolean res = checksam(A, B);
if(res == false)
System.out.println("不是变形词");
else
System.out.println("是变形词");
}
}
题四: 替换字符串中的空格
请编写一个方法,将字符中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。
给定个一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。
解法一:
public class LianXi {
public static String replaceString(String iniString, int length){
return iniString.replaceAll("\\s", "%20");
}
public static void main(String[] args){
System.out.println(replaceString("Mr John Smith",13));
}
}
解法二:
public class LianXi {
public static String replaceString(char[] iniString, int length){
int count = length;
for(int i = 0; i<length; i++){
if(iniString[i] == ' ')
count += 2;
}
int p1 = length - 1;
int p2 = count - 1;
while(p1 > 0){
if(iniString[p1] == ' '){
iniString[p2--] = '0';
iniString[p2--] = '2';
iniString[p2--] = '%';
}
else{
iniString[p2--] = iniString[p1];
}
p1--;
}
return new String(iniString,0,count);
}
public static void main(String[] args){
System.out.println(replaceString("Mr John Smith000000".toCharArray(),13));
}
}
题五:压缩字符串
利用字符串重复出现的次数,编写一个方法,实现基本的字符串压缩功能。
比如,字符串“aabcccccaaa” 经压缩会变成a2b1c5a3。
若压缩后的字符串没有变短,则返回原先的字符串。
给定一个string iniString 为特压缩的串(长度小于等于10000),
保证串内字符均由大小写英文字母组成,返回一个string ,为所求的压缩后或为变化的串
测试样例
“aabcccccaaa”
返回:“a2b1c5a3”
import java.util.Scanner;
public class LianXi {
public static String zipString(String s){
int count = 0;
int last = 0;
StringBuilder sb = new StringBuilder();
for(int i = 0; i<s.length(); i++){
char charat = s.charAt(i);
if(sb.length() == 0){
sb.append(charat);
count++;
}
else{
if(last == charat){
//和上一个字符相同
count++;
}
else{
//和上一个字符不同
sb.append(count).append(charat);
count = 1; //重置为1
}
}
last = charat;
}
//考虑最后一个字符的重复次数
if(count >=1){
sb.append(count);
}
//比较新字符串和原字符串
if(sb.length()>=s.length()){
return s;
}
return sb.toString();
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s = in.next();
String res = zipString(s);
System.out.println(res);
}
}
题六:判断两字符串的字符集是否相同
解法一:
import java.util.Scanner;
public class LianXi {
public static boolean checkSam(String s1, String s2){
int[] help = new int[1000];
for(int i = 0; i<s1.length(); i++){
char c = s1.charAt(i);
if(help[c]==0){
help[c] = 1;
}
}
for(int j = 0; j<s2.length(); j++){
char c = s2.charAt(j);
if(help[c]==0){
return false;
}
}
return true;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s1 = in.next();
String s2 = in.next();
boolean res = checkSam(s1, s2);
if(res==false)
System.out.println("不相同");
else
System.out.println("相同");
}
}
解法二:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class LianXi {
public static boolean checkSam(String s1, String s2){
Map<Character,Integer> map = new HashMap<>();
for(int i = 0; i<s1.length(); i++){
char c = s1.charAt(i);
if(map.get(c) == null){
map.put(c, 1);
}
}
for(int j = 0; j<s2.length(); j++){
char c = s2.charAt(j);
if(map.get(c) == null){
return false;
}
}
return true;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s1 = in.next();
String s2 = in.next();
boolean res = checkSam(s1, s2);
if(res==false)
System.out.println("不相同");
else
System.out.println("相同");
}
}
题七: 字符串移位包含的问题
给定两个字符串s1和s2,要求判定s2是否能够通过s1作循环移位得到的字符串包含。例如,给定s1 = AABCD和 s2 = CDAA,返回true;给定s1 = ABCD和 s2 = ACBD,返回false。
import java.util.Scanner;
public class LianXi {
public static boolean checkSam(String A, String B){
StringBuilder sb = new StringBuilder(A).append(A);
return sb.toString().contains(B);
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s1 = in.next();
String s2 = in.next();
System.out.println(checkSam(s1,s2));
}
}
题八:将字符串中按单词翻转
import java.util.Scanner;
public class LianXi {
static String reverse(String src){
//首先将整个字符串按照字符翻转,再找到每个单词,将单词翻转
String s1 = reverseString(src);
String[] words = s1.split("\\s");
StringBuilder sb = new StringBuilder();
for(int i = 0; i<words.length; i++){
sb.append(reverseString(words[i]) + " ");
}
return sb.deleteCharAt(sb.length()-1).toString();
}
public static String reverseString(String s){
StringBuilder sb = new StringBuilder(s);
return sb.reverse().toString();
}
public static void main(String[] args){
String res = reverse("here you are");
System.out.println(res);
}
}
题九:神奇的回文串
判断一个字符串是否为回文串
import java.util.Scanner;
public class LianXi {
public static boolean isPalindrom(String s){
if(s == null || s==""){
return true;
}
return s.equals(new StringBuilder(s).reverse().toString());
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s = in.next();
System.out.println(isPalindrom(s));
}
}
回文数:
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
public class LianXi {
public static void main(String[] args){
for(int i = 1; i<10; i++){
for(int j = 0; j<10; j++){
System.out.println(i*1000 + j*100 + j*10 + i);
}
}
}
}