蓝桥杯字符串经典练习题

题一:

判断字符串中有无重复的字符


import java.util.Scanner;
/**
 * 思路:
 * 		判断编码形式为ascii还是其他编码形式,ascii的字符集为128个,扩展后为256个,数量不大
 * 		将字符转换为整数,在数组里判断是否存在
 */

public class case1_判断字符串有无重复的字符 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		String str = in.next();
		//System.out.println(str);
		boolean is = checkDifferent(str);
		System.out.println(is);

	}
	private static boolean checkDifferent(String str) {
		// 判断是否为空
		if (str.isEmpty()) {
			return false;
		}
		
		// 辅助数组
		int[] help = new int[128];
		
		// 遍历数组
		for (int i=0;i<str.length();i++) {
			// 将字符串中的数组转换为int
			int num = (int) str.charAt(i);
			if (help[num]>0) {
				return false;
			} else {
				help[num]++;
			}
		}
		
		
		return true;
	}

}

题二:

翻转字符串

package com;

import java.util.Scanner;
/**
 * 思路:
 * 		java直接调用API,String是不可以改变的,将String改为StringBuffer,StringBuffer.reverse.toString();
 * 		字符就是创建一个新数组,String倒序存入新数组,然后new String(字符数组);
 */

public class case2_翻转字符串 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		String str = in.next();
		
		reverse(str);

	}
	private static void reverse(String str) {
		StringBuffer sb = new StringBuffer(str);
		System.out.println(sb.reverse().toString());
	}

}

题三:
判断两个词是否互为变形词(变形词:两个字符串有相同的字符和数量组成)

package com;

import java.util.Arrays;

/**
 * 题意:变形词,两个字符串有相同的字符和数量组成
 * 思路:java,将字符串变为字符数组,然后对字符数组排序,对两个字符数组进行比较
 * 		使用一个256的辅助数组
 */

public class case3_变形词 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String str1 = "asdffqwe";
		String str2 = "dqweasff";
		
		if (checkSam(str1,str2)) {
			System.out.println(str1+"与"+str2+"互为变形词");
			
		} else {
			System.out.println("不是变形词");
		}
		

	}
	private static boolean checkSam(String str1,String str2) {
		
		// 初始判断,如果两个字符串长度都不相等,就没有在比较的意义了
		if (str1.length() != str2.length()) {
			return false;
		}
		
		// 将String转为字符数组
		char[] str11 = str1.toCharArray();
		char[] str22 = str2.toCharArray();
		
		Arrays.sort(str11);
		Arrays.sort(str22);
		return Arrays.equals(str11, str22);
		
	}

}

题四:

将字符串中的空格替换为给定的字符

package com;
/**
 * 思路:调用java中String的api接口replaceAll进行替换
 */
public class case4_将空格替换为 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(replace("qwe asd zxc",11));

	}
	
	
	private static String replace(String str,int len) {
		return str.replaceAll(" ","%20");
	}

}

题五:

压缩字符串

package com;
/**
 * 利用字符重复出现的次数,编写一个方法,实现最基本的字符串压缩功能
 * 比如:字符串"aabcccccaaa",经压缩转变为"a2bc5a3"
 * 若压缩后的字符串没有变短,则返回原来的字符串
 */

import java.util.Scanner;

public class case5_字符串压缩 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 接收输入值
		Scanner in = new Scanner(System.in);
		String src = in.next();
		
		// 判断输入的字符串是否为空
		if (src.length() == 0) {
			return;
		}
		
		// 调用压缩字符串方法对字符串进行压缩
		String ys = zipString(src);
		
		System.out.println(ys);

	}
	
	private static String zipString(String src) {
		
		// 对字符串进行压缩
		int count = 1; // 相同字符的数量,肯定有一个字符
		int last = 0;      // 该字符的位置,后面的字符与它进行判断
		
		StringBuilder sb = new StringBuilder();
		sb.append(src.charAt(0));
		
		for (int i=1;i<src.length();i++) {
			if (src.charAt(last) == src.charAt(i)) {
				count++;
				continue;
			} else {
				if (count != 1) {
					sb.append(count);
					count=1;

				}
				
				sb.append(src.charAt(i));
				last=i;
				continue;
			}
			
		}
		
		// 给最后一个字符填值
		if (count != 1) {
			sb.append(count);
		}
		
		// 判断字符串是否压缩
		if (src.length() == sb.toString().length()) {
			return src;
		}
		
		
		return sb.toString();
	}
	
	

}

题六

判断两字符串的字符集是否相同

package com;

import java.util.HashMap;
import java.util.Map;

public class case6_判断两字符串的字符集是否相同 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String str1 = "qweasdf";
		String str2 = "fdsaew";
		
		boolean flag = check(str1,str2);
		System.out.println(flag);

	}
	/**
	 * 这样写是有限制的,只可以是ASCII字符,改变了就不可以了
	 * BUG:
	 * 		str2字符集全在str1中,str1中有部分字符集str2没有,也是true
	 */
	private static boolean check(String str1,String str2) {
		
		int[] help = new int[256];
		
		for (int i=0;i<str1.length();i++) {
			if (help[str1.charAt(i)] != 1) {
				help[str1.charAt(i)] = 1;
			}
		}
		
		for (int i=0;i<str2.length();i++) {
			if (help[str2.charAt(i)] != 1) {
				return false;
			}
		}
		
		
		return true;
	}
	
	/**
	 * 使用HashMap集合可以是字符不仅仅只限于ASCII,这种方法BUG依然存在
	 */
	private static boolean check2(String str1,String str2) {
		
		Map<Character, Integer> map = new HashMap<>();
		
		for (int i=0;i<str1.length();i++) {
			if (map.get(str1.charAt(i)) == null) {
				map.put(str1.charAt(i),1);
			}
		}
		
		for (int i=0;i<str2.length();i++) {
			if (map.get(str2.charAt(i)) == null) {
				return false;
			}
		}
		
		
		return true;
	}
	

}

题七:

旋转词
旋转词

package com;
/**
 * 调用了java的API   .contains
 *
 */

public class case7_旋转词 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		boolean flag = isRotate("erdssdfwq", "sdfwqerds");
		System.out.println(flag);

	}
	
	private static boolean isRotate(String str1,String str2) {
		
		// 要是旋转词,长度必须一致
		if (str1.length() != str2.length()) {
			return false;
		}
		
		// 将两个字符串拼接
		String p = str2+str2;
	
		return p.contains(str1);
	}

}

题八:

翻转字符串中的单词

package com;

/**
 * 先将字符串翻转,然后在按单词分割,将单词重新翻转过来
 *
 */

public class case8_翻转字符串中的单词 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String src = "here you are";
		
		// 先将字符串整体翻转
		String reverseSrc = reverseString(src);
		
		// 将字符串中的单词分割出来
		String[] rstrs = reverseSrc.split(" ");
		
		StringBuilder sb = new StringBuilder();
		
		for (int i=0;i<rstrs.length;i++) {
			String str = reverseString(rstrs[i]);
			sb.append(str+" ");
		}
		
		// 最后一个有空格,将空格去掉
		String Src = sb.deleteCharAt(sb.length()-1).toString();
		
		System.out.println(Src);
		
	}
	
	// 翻转字符串
	private static String reverseString(String str) {
		
		StringBuilder sb = new StringBuilder(str);
		
		return sb.reverse().toString();
	}
	

}

题九:

移除字符串中出现的连续k个0

package com;

public class case9_移除k个0 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String str = "10000000200030040";
		String str1 = removeZero1(str, 3);
		System.out.println(str1);
		

	}
	
	/**
	 * 使用正则表达式的方式进行删除
	 */
	private static String removeZero(String str,int k) {
		
		String regexp = "0{"+k+"}";

		return str.replaceAll(regexp, "");
	}
	
	/**
	 * 将String转换为字符数组的方法取解决
	 */
	private static String removeZero1(String str,int k) {
		
		// 将String转换为char数组
		char[] str1 = str.toCharArray();
		StringBuilder sb = new StringBuilder();
		
		int count = 0;
		
		for (int i=0;i<str.length();i++) {
			char c = str1[i];
			
			if (c == '0') {
				
				count++;
				
				
			}else {
				for (int j=0;j<count%k;j++) {
					sb.append('0');
				}
				sb.append(c);
				count=0;
			}
			
			
		}
		for (int j=0;j<count%k;j++) {
			sb.append('0');
		}
		
		return sb.toString();
	}

}

题10:

回文串

package com;

public class case10_回文串 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		String str = "asddsa";
		boolean flag = isPalindrome(str);
		
		System.out.println(flag);
		
	}
	
	private static boolean isPalindrome(String str) {
		if (str.length()==0) {
			return true;
		}
		
		StringBuilder sb = new StringBuilder(str);
		
		return str.equals((sb.reverse().toString()));
	}

}

练习题:
练习题

package com;
/**
 * 输出0-9999以内的所有回文数
 *
 */

public class case11_回文数 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		for (int i=1;i<10;i++) {
			for (int j=0;j<10;j++) {
				System.out.println(i*1000+j*100+j*10+i);
			}
		}

	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值